﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Coomtools.weightclasses
{
    //********************本文件中包括几个类********************
    //*********************************************************
  
    //******************* 1.实例化后 反射该 dll中 包含多少个可以操作的电子称型号的汇聚类************************************

    /// <summary>
    /// 实例化后 反射该 dll中 包含多少个可以操作的电子称型号的汇聚类
    /// </summary>
    public class Myweightclasses
    {
      /// <summary>
      /// 可支持电子称种类信息  key：种类名 value:对应的类名
      /// </summary>
        public   Dictionary<string, string> Allweights;

      

     /// <summary>
     /// 无参构造函数时就添加字典中支持的电子秤名称和对应的类名称
     /// </summary>
        public  Myweightclasses()

        {

            Allweights = new Dictionary<string, string>();
            Allweights.Add("顶尖称(老版51模式)", "Aclas51");
            Allweights.Add("顶尖称(新版32模式)", "Aclas32");
            Allweights.Add("容大", "Aclas51");
            Allweights.Add("有声精函", "JHScale");
            Allweights.Add("大华称(未实现)", "DaHua");
        

        } 
    }
    //*********************1.over*************************************************


    //*********************2.电子秤类的基类r*************************************************   

    /// <summary>
    /// 电子秤类的基类
    /// </summary>
    public class Myweightbase
    {
     /// <summary>
     /// PLu文件中 key 数字或字母代表的 value 重量单位
     /// </summary>
        public Dictionary<string, string> D_WeightUnitflag=new Dictionary<string, string> ();

      /// <summary>
      /// 界面列表控件显示需要的PLu结构用于传输PLU，可不用。 后期是否改为类待定
      /// </summary>
        //public struct UIPLU {

        //    public string HotKeyNumber;
        //    public string PLUName;
        //    /// <summary>
        //    /// 货号组成条码用
        //    /// </summary>
        //    public string LFCode;
        //  /// <summary>
        //  /// 生鲜码
        //  /// </summary>
        //    public string PLUCode;
        //    public string BarcodeCLass;
        //    public string WeightUnit;
        //    public string UnitPrice;
        //    /// <summary>
        //    /// 生鲜识别码
        //    /// </summary>
        //    public string WeightFlage;

        //}



    }
    //*********************2.over*************************************************

    //*********************3.datagrid 界面显示绑定类也用于PLU传输*************************************************
    /// <summary>
    /// datagrid 界面显示绑定类不用于PLU传输
    /// </summary>
    public class Uipluitem
    {
       /// <summary>
       /// 序号
       /// </summary>
        public string serialnumber { get; set; }
       /// <summary>
       /// PLU名称
       /// </summary>
        public string pluname { get; set; }
        /// <summary>
        /// PLU货号
        /// </summary>
        public string lfcode { get; set; }
      /// <summary>
      /// PLU生鲜码
      /// </summary>
        public string PLUcode { get; set; }
       /// <summary>
       /// 热键号
       /// </summary>
        public string HotKey { get; set; }
        /// <summary>
        /// 传称价格
        /// </summary>
        public string price { get; set; }
      /// <summary>
      /// 解析后界面显示的单位名（汉字或数字）
      /// </summary>
        public string unit { get; set; }
       /// <summary>
       /// 传称用的单位编码（数字）不同的称不一样
       /// </summary>
        public string unitcode { get; set; }

    
        private string Barcodeclass;

        /// <summary>
        /// 解析后界面显示的条码类型名（汉）没有的称统一显示为（未设置）有的目前等同barcodeclassCode数字显示
        /// </summary>
        public string barcodeclass
        {
            get
            {
                if (Barcodeclass==null|| Barcodeclass=="")
                {
                    return "未设置";

                }
                
                return Barcodeclass; }
            set { Barcodeclass = value; }
        }


        private string BarcodeclassCode;

        /// <summary>
        ///  传称用的的条码类型编号（数字）没有的统一为0 有的称在自己的类中统一处理重新定义
        /// </summary>
        public string barcodeclassCode
        {
            get {
                if (BarcodeclassCode == null || BarcodeclassCode == "")
                {
                    return "0";

                }

                return  BarcodeclassCode; }
           
            
            
            
            set {  BarcodeclassCode = value; }
        }


        //public string barcodeclassCode { get; set; }

        public string WeightFlage { get; set; }
    




    }

    //*********************3.OVER*************************************************


    //******************************************************
    //***********4.下面电子秤通用方法接口**************************
    //******************************************************

    /// <summary>
    /// 电子秤通用方法接口
    /// </summary>
    public interface IweightInteface
    {
        /// <summary>
        /// 初始化本类 的方法
        /// </summary>
        void InitThisClass();


        /// <summary>
        /// 匹配已知道的本类中 数字代表的重量单位
        /// </summary>
        /// <param name="weightunitflag">数字或字母代表的重量单位</param>
        /// <returns>重量单位<</returns>
        string findMyWeightUnitFlag(string weightunitflag);


        bool CheckIsNeedFile(string readfilepath);

        /// <summary>
        /// 读取本类能够读取的PLU文件并返回界面需要的PLU List集合
        /// </summary>
        /// <param name="readfilepath">PLU文件的路径</param>
        /// <returns>界面需要的PLU List集合</returns>
        dynamic ReadPLuResourseFile(string readfilepath);

        bool Link_EWeightOK(string IPAdress,string port);
        int StartTranfPLU(string IPAdress, string port);
        int StartTranHotKey(string IPAdress,string port);

        bool Close_EWeightConnect(string IPAdress,string port);

    }
}
